/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ru.jSkyRoom.factory;

import ru.jSkyRoom.finder.FinderByEdid;
import ru.jSkyRoom.finder.FromModByEdidFinder;
import ru.jSkyRoom.interfaces.JSkyMod;
import ru.jSkyRoom.interfaces.major.ActorValue;
import ru.jSkyRoom.interfaces.major.Ammo;
import ru.jSkyRoom.interfaces.major.Armature;
import ru.jSkyRoom.interfaces.major.Armor;
import ru.jSkyRoom.interfaces.major.Book;
import ru.jSkyRoom.interfaces.major.Container;
import ru.jSkyRoom.interfaces.major.Dialog;
import ru.jSkyRoom.interfaces.major.DialogBranch;
import ru.jSkyRoom.interfaces.major.DialogView;
import ru.jSkyRoom.interfaces.major.Enchantment;
import ru.jSkyRoom.interfaces.major.EncounterZone;
import ru.jSkyRoom.interfaces.major.Faction;
import ru.jSkyRoom.interfaces.major.FormList;
import ru.jSkyRoom.interfaces.major.GameSetting;
import ru.jSkyRoom.interfaces.major.GlobalForm;
import ru.jSkyRoom.interfaces.major.HeadPart;
import ru.jSkyRoom.interfaces.major.ImageSpace;
import ru.jSkyRoom.interfaces.major.Ingredient;
import ru.jSkyRoom.interfaces.major.Keyword;
import ru.jSkyRoom.interfaces.major.LeveledCharacter;
import ru.jSkyRoom.interfaces.major.LeveledItemList;
import ru.jSkyRoom.interfaces.major.MagicEffect;
import ru.jSkyRoom.interfaces.major.Major;
import ru.jSkyRoom.interfaces.major.Miscellaneous;
import ru.jSkyRoom.interfaces.major.NPC;
import ru.jSkyRoom.interfaces.major.Outfit;
import ru.jSkyRoom.interfaces.major.Perk;
import ru.jSkyRoom.interfaces.major.Potion;
import ru.jSkyRoom.interfaces.major.Projectile;
import ru.jSkyRoom.interfaces.major.Quest;
import ru.jSkyRoom.interfaces.major.Race;
import ru.jSkyRoom.interfaces.major.Recipe;
import ru.jSkyRoom.interfaces.major.Scroll;
import ru.jSkyRoom.interfaces.major.Spell;
import ru.jSkyRoom.interfaces.major.Texture;
import ru.jSkyRoom.interfaces.major.Weapon;
import ru.jSkyRoom.manager.ModManager;
import ru.jSkyRoom.support.GrupTypeBuilder;
import skyproc.GRUP_TYPE;

/**
 *
 * @author Rakev
 */
public class FinderByEdidFactory {

    private static FinderByEdidFactory instance = new FinderByEdidFactory();

    public static FinderByEdidFactory create() {
        return instance;
    }

    protected FinderByEdidFactory() {
    }

    private JSkyMod getLookingMod() {
        return ModManager.getInstance().getAllModsComposite();
    }

    public FinderByEdid<Major> createMajorFinder() {
        GrupTypeBuilder grupTypeBuilder = new GrupTypeBuilder().All();
        GRUP_TYPE[] lookingGrups = grupTypeBuilder.build();
        return new FromModByEdidFinder<>(getLookingMod(), lookingGrups);
    }

    public FinderByEdid<Keyword> createKeywordFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.KYWD);
    }

    public FinderByEdid<FormList> createFormListFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.FLST);
    }

    public FinderByEdid<Armor> createArmorFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.ARMO);
    }

    public FinderByEdid<Weapon> createWeaponFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.WEAP);
    }

    public FinderByEdid<Armature> createArmatureFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.ARMA);
    }

    public FinderByEdid<Enchantment> createEnchantmentFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.ENCH);
    }

    public FinderByEdid<Race> createRaceFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.RACE);
    }

    public FinderByEdid<Texture> createTextureFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.TXST);
    }

    public FinderByEdid<Ammo> createAmmoFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.AMMO);
    }

    public FinderByEdid<Potion> createPotionFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.ALCH);
    }

    public FinderByEdid<Book> createBookFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.BOOK);
    }

    public FinderByEdid<Spell> createSpellFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.SPEL);
    }

    public FinderByEdid<Recipe> createRecipeFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.COBJ);
    }

    public FinderByEdid<Container> createContainerFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.CONT);
    }

    public FinderByEdid<Dialog> createDialogFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.DIAL);
    }

    public FinderByEdid<EncounterZone> createEncounterZoneFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.ECZN);
    }

    public FinderByEdid<NPC> createNPCFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.NPC_);
    }

    public FinderByEdid<Faction> createFactionFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.FACT);
    }

    public FinderByEdid<GlobalForm> createGlobalFormFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.GLOB);
    }

    public FinderByEdid<ImageSpace> createImageSpaceFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.IMGS);
    }

    public FinderByEdid<Ingredient> createIngredientFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.INGR);
    }

    public FinderByEdid<LeveledCharacter> createLeveledCharacterFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.LVLN);
    }

    public FinderByEdid<MagicEffect> createMagicEffectFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.MGEF);
    }

    public FinderByEdid<Perk> createPerkFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.PERK);
    }

    public FinderByEdid<Miscellaneous> createMiscellaneousFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.MISC);
    }

    public FinderByEdid<Outfit> createOutfitFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.OTFT);
    }

    public FinderByEdid<Projectile> createProjectileFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.PROJ);
    }

    public FinderByEdid<Quest> createQuestFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.QUST);
    }

    public FinderByEdid<Scroll> createScrollFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.SCRL);
    }

    public FinderByEdid<LeveledItemList> createLeveledItemListFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.LVLI);
    }

    public FinderByEdid<GameSetting> createGameSettingFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.GMST);
    }

    public FinderByEdid<ActorValue> createActorValueFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.AVIF);
    }

    public FinderByEdid<HeadPart> createHeadPartFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.HDPT);
    }

    public FinderByEdid<DialogBranch> createDialogBranchFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.DLBR);
    }

    public FinderByEdid<DialogView> createDialogViewFinder() {
        return new FromModByEdidFinder<>(getLookingMod(), GRUP_TYPE.DLVW);
    }
}
